iT邦幫忙

0

PowerShell的dir命令

  • 分享至 

  • xImage
  •  

測試於 PowerShell 5.1

dir 檔案 vs dir 資料夾

dir 檔案 → 得到檔案
dir 資料夾 → 不是得到資料夾
       而是得到資料夾裡的檔案和子資料夾

如果要得到資料夾本身,可以使用get-item

#得到檔案
PS R:\> (dir C:\Pic\1.jpg).FullName
C:\Pic\1.jpg

#得到資料夾裡的檔案和子資料夾
PS R:\> (dir C:\Pic\新增資料夾).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg

#使用get-item
PS R:\> (gi C:\Pic\新增資料夾).FullName
C:\Pic\新增資料夾

使用 -Recurse 參數,起始層的不同

沒有使用 -r

#起始層:C:\Pic
#尋找:新*
PS R:\> (dir C:\Pic\新*).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002

#新增「C:\Pic\新文字文件.txt」之後:
#起始層:C:\Pic
#尋找:新*
PS R:\> (dir C:\Pic\新*).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\新文字文件.txt

沒有特別之處

有使用 -r

C:\Pic 和 C:\Pic\* 的差別

#C:\Pic裡面的情形
PS R:\> (dir C:\Pic).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002

#起始層:C:\Pic
#尋找:全部
PS R:\> (dir C:\Pic -r).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg


#起始層:「C:\Pic\新增資料夾」、「C:\Pic\新增資料夾002」
#      (起始層「資料夾」沒有列出)
#尋找:全部
PS R:\> (dir C:\Pic\* -r).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg

#新增「C:\Pic\1.jpg」之後:
PS R:\> (dir C:\Pic).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg

#起始層:C:\Pic
#尋找:全部
PS R:\> (dir C:\Pic -r).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg

#起始層:C:\Pic
#尋找:全部
PS R:\> (dir C:\Pic\* -r).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg

當使用 -r 參數
dir C:\Pic 的起始層:
  都是:C:\Pic

dir C:\Pic\*的起始層:
  C:\Pic\*全部都是資料夾:「新增資料夾」、「新增資料夾002」
  以外情形:C:\Pic

還有

#C:\Pic裡面的情形
PS R:\> (dir C:\Pic).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg

#起始層:「新增資料夾」、「新增資料夾002」
#      (起始層「資料夾」沒有列出)
#尋找:全部
PS R:\> (dir C:\Pic\新* -r).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg

#新增「C:\Pic\新文字文件.txt」之後:
#起始層:C:\Pic
#尋找:新*
PS R:\> (dir C:\Pic\新* -r).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾002
C:\Pic\新文字文件.txt

當使用 -r 參數
C:\Pic\新* 全部都是資料夾:
  起始層:「新增資料夾」、「新增資料夾002」
  尋找:全部

以外情形:
  起始層:C:\Pic
  尋找:新*


-Recurse參數 搭配 -Include參數

#C:\Pic裡面的情形
PS R:\> (dir C:\Pic).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg

#起始層:C:\Pic
#尋找:*
PS R:\> (dir C:\Pic -r -i *).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg
C:\Pic\1.jpg

#起始層:「新增資料夾」、「新增資料夾002」、「1.jpg」
#      (起始層「資料夾」沒有列出)
#尋找:*
PS R:\> (dir C:\Pic\* -r -i *).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg
C:\Pic\1.jpg

#起始層:「新增資料夾」、「新增資料夾002」
#      (起始層「資料夾」沒有列出)
#尋找:1*
#沒有列出 C:\Pic\1.jpg
PS R:\> (dir C:\Pic\新* -r -i 1*).FullName
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg

#新增「新文字文件.txt」之後
PS R:\> (dir C:\Pic).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg
C:\Pic\新文字文件.txt

#起始層:「新增資料夾」、「新增資料夾002」、「新文字文件.txt」
#      (起始層「資料夾」沒有列出)
#尋找:1*
#結果:和新增「新文字文件.txt」之前一樣
PS R:\> (dir C:\Pic\新* -r -i 1*).FullName
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg

只要有指定 -Include參數,
起始層就是 C:\Pic\新*
不會像只使用-r參數時那樣,有兩種情形


-Recurse參數 搭配 -Exclude參數

#C:\Pic裡面的情形
PS R:\> (dir C:\Pic).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg

#用 -ex 過濾之前
#起始層:「新增資料夾」、「新增資料夾002」
#      (起始層「資料夾」沒有列出)
#尋找:全部
PS R:\> (dir C:\Pic\新* -r).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg

#用 -ex 過濾之後
PS R:\> (dir C:\Pic\新* -r -ex 1*).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\2.jpg

#新增「新文字文件.txt」之後
PS R:\> (dir C:\Pic).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg
C:\Pic\新文字文件.txt

#用 -ex 過濾之前
#起始層:C:\Pic
#尋找:新*
PS R:\> (dir C:\Pic\新* -r).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾002
C:\Pic\新文字文件.txt

#用 -ex 過濾
#起始層:C:\Pic
#尋找:新*
#不會影響起始層
PS R:\> (dir C:\Pic\新* -r -ex 1*).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾002
C:\Pic\新文字文件.txt

-Exclude參數:
  純過濾
  不會影響起始層

-Include參數 -Exclude參數的使用注意事項

最好只搭配 -Recurse參數 使用

不搭配 -Recurse參數的情形

PS R:\> (dir C:\Pic).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg
C:\Pic\新文字文件.txt

#不搭配 -r 的時候,會難以理解
#第一個命令沒反應,因為C:\Pic 資料夾名稱不是 新*
#-Include檢查名稱有兩處:
#       「資料夾」、「資料夾裡的東西」
#檢查成功,傳回「資料夾裡的東西」
PS R:\> (dir C:\Pic -Include 新*).FullName
PS R:\> (dir C:\Pic\* -Include 新*).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新文字文件.txt

#不搭配 -r 的時候,會難以理解
#它沒有列出C:\Pic\新增資料夾\1.jpg
#因為「新增資料夾」不符合 1*
PS R:\> (dir C:\Pic -Include 1*).FullName
PS R:\> (dir C:\Pic\* -Include 1*).FullName
C:\Pic\1.jpg

PS R:\> (dir C:\Pic -ex *.txt).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg

PS R:\> (dir C:\Pic\* -ex *.txt).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg
C:\Pic\1.jpg

PS R:\> (dir C:\Pic -ex p*).FullName
PS R:\> (dir C:\Pic\* -ex p*).FullName
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg
C:\Pic\1.jpg
C:\Pic\新文字文件.txt

在根目錄使用,也有問題
問題很多,不如跳過


-Depth參數

PS R:\> (dir C:\Pic -r -depth 0  ).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾002
C:\Pic\1.jpg
C:\Pic\新文字文件.txt

#加了 -i參數,就壞了
PS R:\> (dir C:\Pic -r -depth 0  -i *).FullName
C:\Pic\新增資料夾
C:\Pic\新增資料夾\新_子資料夾
C:\Pic\新增資料夾\1.jpg
C:\Pic\新增資料夾\2.jpg
C:\Pic\新增資料夾002
C:\Pic\新增資料夾002\11.jpg
C:\Pic\新增資料夾002\12.jpg
C:\Pic\1.jpg
C:\Pic\新文字文件.txt

-Filter參數 與-Include參數的比較

萬用字元:
  -Filter:
    *?
    cmd style

  -Include:
    *?[]
    PowerShell style

過濾條件有幾個:
  -Filter:1個
    例如:dir -filter a*

  -Include:多個
    例如:dir -r -in a*,b*,c*


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言